/**Universidad del Valle de Guatemala 
 * Algoritmos y Estructura de Datos
 * Dennisse Escobar Delgado
 * Fecha: 20/09/2012
 * Produce la tabla de frecuencia de arboles binarios.  
 */

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.SQLException;

import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
import javax.swing.border.TitledBorder;
import javax.swing.event.*;
import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.ImageIcon;

public class Interfaz extends JFrame implements ActionListener
{
        /**
     * Es una referencia la clase principal del mundo
     */
        ArbolHuffman arbol;
        
        /**
         * Ventana principal de la interfaz
         */
        private JFrame ventana = new JFrame("Arbol de Huffman");
        
        /**
         * Etiquetas de la ventana principal 
         */
        private JLabel etiqueta = new JLabel("      Árbol de Huffman");
        private JLabel mensaje = new JLabel("Mensaje: ");
        
        /**
         * Paneles de la interfaz
         */
        private JPanel panelTitulo = new JPanel();
        private JPanel panelConsulta = new JPanel();
        private JPanel panelDatos = new JPanel();
        
        /**
         * Paneles de texto, donde se desplegará la nómina
         */
        private JTextPane lista = new JTextPane();
        
        /**
         * Barra de desplazamiento de texto, para moverse en el panel de texto
         */
        private JScrollPane scroll = new JScrollPane();
        
        /**
         * Botones de la interfaz
         */
        private JButton analizar = new JButton("Analizar");
        
        /**
         * Campos de edición de texto, para la inserción de empleados
         */
        private JTextField cadena= new JTextField();
                
        //---------------------------------------------
        //CONSTANTES
        //---------------------------------------------
        
        /**
     * Constante de los botones
     */
        
        public static final String ANALIZAR = "analizar";
        
        
        //---------------------------------------------
        //CONSTRUCTOR
        //---------------------------------------------
        
        /**
         * Construye una nueva interfaz y agrega sus componentes a la interfaz
         */
public Interfaz() 
{
        
        /**
         * Configuración de la ventana prinicipal
         */
        ventana.setLayout(new BorderLayout());
        ventana.setSize(320,500);
    ventana.setVisible(true);
        
        /**
         * Configuración de los paneles
         */
    panelTitulo.setBackground(Color.WHITE);
    panelTitulo.setLayout(new BorderLayout());
    
        TitledBorder border3 = BorderFactory.createTitledBorder("Visualización de los resultados");
        panelConsulta.setBorder(border3);
        panelConsulta.setLayout(new BorderLayout());
        panelConsulta.setBackground(Color.WHITE);
                
        TitledBorder border4 = BorderFactory.createTitledBorder("Ingrese su mensaje: ");
        panelDatos.setBorder(border4);
        panelDatos.setLayout(new BorderLayout());
        panelDatos.setBackground(Color.WHITE);
        
        /**
         * Configuracion del panel de texto
         */     
        lista.setBackground(Color.WHITE);
        lista.enable(false);
        
        /**
         * Configuracion de la barra de desplazamiento
         */             
        scroll.setVerticalScrollBarPolicy( JScrollPane.VERTICAL_SCROLLBAR_ALWAYS );
    scroll.setPreferredSize( new Dimension( 230, 200 ) );
    scroll.getViewport( ).add( lista );
        
        /**
         * Configuracion de los botones
         */
    analizar.setBackground(Color.WHITE);
    analizar.setForeground(Color.MAGENTA);
    analizar.setActionCommand(ANALIZAR);
    analizar.addActionListener(this);
        
        /**
         * Configuración de las etiquetas
         */
        etiqueta.setBackground(Color.WHITE);
        etiqueta.setForeground(Color.MAGENTA);
        etiqueta.setFont( new Font( "Comic Sans MS", Font.BOLD, 48 ) );
        mensaje.setBackground(Color.WHITE);
        mensaje.setForeground(Color.MAGENTA);
        
        /**
         * inserción de los elementos a los paneles
         */
        panelTitulo.add(etiqueta, BorderLayout.CENTER);
        panelDatos.add(mensaje, BorderLayout.WEST);
        panelDatos.add(cadena, BorderLayout.CENTER);
        panelDatos.add(analizar, BorderLayout.EAST);
        panelConsulta.add(scroll, BorderLayout.CENTER);
        
        /**
         * inserción de los elementos a la ventana principal
         */
     ventana.add(panelTitulo, BorderLayout.NORTH);
     ventana.add(panelDatos, BorderLayout.SOUTH);
     ventana.add(panelConsulta, BorderLayout.CENTER);
     
  }

        //---------------------------------------------
        //MÉTODOS
        //---------------------------------------------
        
        /**
         * Manejo de los eventos de los botones
         * @param e Acción que generó el evento.
         */

        
    @Override
        public void actionPerformed( ActionEvent e )  
        {
                
                if( e.getActionCommand( ).equals(ANALIZAR) )
                {
                        arbol = new ArbolHuffman();
                        arbol.analizar(cadena.getText());
            System.out.println("La cadena se analizó con exito");
            if (!(cadena.getText() == null))
                lista.setText(arbol.toString());
            else
                System.out.println("No se ingreso una cadena");
                }
                
                
        }
        
         /**
     * Este método ejecuta la aplicación
     * @param args Parámetros de ejecución - No se deben utilizar
     */     
        public static void main(String[]args)
        {
                Interfaz interfaz;
                interfaz = new Interfaz();
                                
        }
}
